package com.cn.esermis.server;

import com.alibaba.fastjson2.JSONObject;
import com.cn.esermis.constant.Constant;
import lombok.extern.log4j.Log4j2;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
@Log4j2
public class PublisherService {

    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 发送消息到redis频道供订阅。注意：使用redis客户端redis-cli登录订阅查看的中文内容是以16进制的形式
     *      表示的，若要查看中文字符，需要在连接时强制原始输出 redis-cli -h localhost -p 6379 --raw
     *      然后再使用命令订阅频道     subscribe system
     * @param message 消息对象
     * @return
     */
    public void pubMsg(JSONObject message) {
        //返回结果
        if (null != message){
            //补全消息实体
            try{
                redisTemplate.convertAndSend(Constant.SERVER, message);    //往指定频道发布消息
                //redisTemplate.opsForList().leftPush(message.getType(), message);    //采用队列的形式发布到redis
                log.info("消息发布到redis队列频道：server 成功！数据:{}",message);
            }catch (Exception e){
                e.printStackTrace();
                log.info("消息发布到redis队列频道：server 失败！报错：{}",e.getMessage());
            }
        }
    }

}
